package com.sxbbc.common.basics.exp;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.sxbbc.common.basics.https.HttpUtil;
import com.sxbbc.common.basics.service.config.Config;

import javax.servlet.http.HttpUtils;

/**
 * 物流快递查询工具类
 * @author xiaoky
 * @date 2019-05-19
 */
public class ExpQueryUtil {
	
	/**
	 * 快递物流信息——聚合查询
	 * @param key 聚合快递查询API所需key
	 * @param code 快递公司编号
	 * @param no 物流单号
	 * @return com.sxbbc.common.basics.exp.ExpVo
	 */
	public static ExpVo queryJHExp(String key,String code,String no) {
		//请求接口地址
        String url ="http://v.juhe.cn/exp/index";
		//请求参数
        Map<String, String> params =new HashMap<String, String>();
		//需要查询的快递公司编号
        params.put("com",code);
		//需要查询的订单号
        params.put("no",no);
		//应用APPKEY(应用详细页查询)
        params.put("key",key);
		//返回数据的格式,xml或json，默认json
        params.put("dtype","json");
        ExpVo vo=new ExpVo();
        try {
        	String result = HttpUtil.getInstance().post(url, params.toString());
            JSONObject object = (JSONObject) JSONObject.parse(result);
         	if(object!=null && object.get("result")!=null && object.getString("error_code").equals("0") && object.get("result").toString().length()>0){
         		vo.setExpNo(no);
         		vo.setExpCode(code);
         		JSONObject jsonObject=(JSONObject) object.get("result");
         		JSONArray jsonArray=jsonObject.getJSONArray("list");
        		List<ExpDetailVo> detailVos=new ArrayList<ExpDetailVo>();
        		for (int i = jsonArray.size()-1; i >=0 ; i--) {
        			ExpDetailVo detailVo=new ExpDetailVo();;
					JSONObject o=jsonArray.getJSONObject(i);
					detailVo.setTime(o.getString("datetime"));
					detailVo.setRemark(o.getString("remark"));
					detailVos.add(detailVo);
				}
        		vo.setList(detailVos);
        		// 物流状态——1 已签收   0 未签收
        		Integer sign = jsonObject.getInteger("status");
        		vo.setSign(sign);
        		// 快递公司名称
        		String expName = jsonObject.getString("company");
        		vo.setExpName(expName);
        		// 查询简介
        		vo.setReason(object.getString("reason"));
        		// 本次查询状态
        		vo.setQueryStatus(true);
        		// 将物流详情集合转成JSON数据，用于保存到数据库
        		vo.setExpDetail(JSONArray.parseArray(JSON.toJSONString(detailVos)).toJSONString());
         	}else {
         		vo.setQueryStatus(false);
         		vo.setReason(object.getString("reason"));
         	}
		} catch (Exception e) {
			vo.setQueryStatus(false);
     		vo.setReason("获取物流信息失败");
		}
        return vo;
	}
	
	/**
	 * 阿里云市场的一个快递查询接口
	 * @param code 快递公司编号
	 * @param no 物流单号
	 * @return com.sxbbc.common.basics.exp.ExpVo
	 */
	public static ExpVo queryAliExpByCode (String code, String no,String mobile) {
		String appCode = Config.properties.getAliExpAppCode();
		//请求接口地址
		String path = "https://jisukdcx.market.alicloudapi.com/express/query";
		//请求参数
        Map<String, String> params =new HashMap<>();
		//需要查询的快递公司编号
        params.put("type",code);
		//需要查询的订单号
        params.put("number",no);
		params.put("mobile",mobile);
        Map<String, String> headers = new HashMap<>();
        headers.put("Authorization", "APPCODE " + appCode);
        ExpVo vo=new ExpVo();
        try {
        	String result = HttpUtil.getInstance().get(path, params, headers);
            JSONObject object = (JSONObject) JSONObject.parse(result);
         	if(object!=null && object.get("result")!=null && object.getString("status").equals("0") && object.get("result").toString().length()>0){
         		vo.setExpNo(no);
         		vo.setExpCode(code);
         		JSONObject jsonObject=(JSONObject) object.get("result");
         		JSONArray jsonArray=jsonObject.getJSONArray("list");
        		List<ExpDetailVo> detailVos=new ArrayList<ExpDetailVo>();
        		for (int i = jsonArray.size()-1; i >=0 ; i--) {
        			ExpDetailVo detailVo=new ExpDetailVo();;
					JSONObject o=jsonArray.getJSONObject(i);
					detailVo.setTime(o.getString("time"));
					detailVo.setRemark(o.getString("status"));
					detailVos.add(detailVo);
				}
        		vo.setList(detailVos);
        		// 物流状态——1 已签收   0 未签收
        		Integer sign = jsonObject.getInteger("issign");
        		vo.setSign(sign);
        		// 快递公司名称
        		String expName = jsonObject.getString("expName");
        		vo.setExpName(expName);
        		// 快递公司电话
        		String expPhone = jsonObject.getString("expPhone");
        		vo.setExpPhone(expPhone);
        		// 查询简介
        		vo.setReason(object.getString("msg"));
        		// 本次查询状态
        		vo.setQueryStatus(true);
        		// 将物流详情集合转成JSON数据，用于保存到数据库
        		vo.setExpDetail(JSONArray.parseArray(JSON.toJSONString(detailVos)).toJSONString());
         	}else {
         		vo.setQueryStatus(false);
         		vo.setReason(object.getString("msg"));
         	}
		} catch (Exception e) {
			vo.setQueryStatus(false);
     		vo.setReason("获取物流信息失败");
		}
        return vo;
	}
}
